var createError = require('http-errors');   // errors http异常 
var express = require('express');   // express 
var path = require('path');    // node  自带的 插件 处理路径 
var cookieParser = require('cookie-parser');   // 解析cookies 
var logger = require('morgan');   // 项目日志文件 

var session = require("express-session"); // 引入 
var cors = require("cors");
// 引入数据库 
var connection = require("./utils/connect");

// 路由文件 写接口
var indexRouter = require('./routes/index');  
var usersRouter = require('./routes/users');
var commentRouter = require('./routes/comment');
var vueRouter = require('./routes/vue');
var {checkToken} =require("./utils")

require("./utils/webSocket");

var app = express();    // 项目核心启动配置文件 app等于得到express 所有的api 方法 

app.use(cors());   // 取消 cors polcy 限制   
// view engine setup
app.set('views', path.join(__dirname, 'views'));  //  __dirname  根目录 / ./views/index.ejs => index.ejs 
app.set('view engine', 'ejs');   // 设置模板引擎  ejs  
 
app.use(logger('dev'));  // 处理日志 
app.use(express.json());  // 获取 post 请求提交的参数  req.body 
app.use(express.urlencoded({ extended: false })); 
app.use(cookieParser());  // 处理cookies 
app.use(express.static(path.join(__dirname, 'public')));  // 设置项目静态资源路径 

app.use(function(req,res,next){
  // console.log("this. is a middleware");
  next();  // 进入下一个中间键
})

app.get("/wh2002",(req,res)=>{
    res.send("wuhan2002 - 你们永远最棒的... ")
})



// session 中间件  必须写在路由中间件前面  (用来保存用户登录后的所有数据)
app.use(session({
  name:"AppTest",
  cookie:{maxAge:1000*60*60},  // session 时长
  secret:"test",
  resave:false,
  saveUninitialized:true
}))



// 设置路由中间键  
app.use('/', indexRouter);   //    app.use("相对路径",路由模块)  路由别名  避免路由模块产生命名冲突
app.use('/users', usersRouter);
app.use('/comment',commentRouter);


app.use(checkToken);
app.use('/vue',vueRouter);


app.use((req,res,next)=>{
    console.log("当前路径 -- " +req.url);
    next();
})  

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
  // next()
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');   // 渲染 服务器 模板    
});

module.exports = app;
